<template>
    <view class="content">
      <view class="navbar" :style="{ position: headerPosition, top: headerTop }">
        <view
          class="nav-item"
          :class="{ current: filterIndex === 0 }"
          @click="tabClick(0)"
        >
          综合排序
        </view>
        <view
          class="nav-item"
          :class="{ current: filterIndex === 1 }"
          @click="tabClick(1)"
        >
          销量优先
        </view>
        <view
          class="nav-item"
          :class="{ current: filterIndex === 2 }"
          @click="tabClick(2)"
        >
          <text>价格</text>
          <view class="p-box">
            <text
              :class="{ active: priceOrder === 1 && filterIndex === 2 }"
              class="yticon icon-shang"
            ></text>
            <text
              :class="{ active: priceOrder === 2 && filterIndex === 2 }"
              class="yticon icon-shang xia"
            ></text>
          </view>
        </view>
        <text
          class="cate-item yticon icon-fenlei1"
          @click="toggleCateMask('show')"
        ></text>
      </view>
      <!-- 空白页 -->
      <empty v-if="goodsList.length == 0"></empty>
      <view v-if="goodsList.length > 0">
        <view class="goods-list">
          <view
            v-for="(item, index) in goodsList"
            :key="index"
            class="goods-item"
            @click="navToDetailPage(item)"
          >
            <view class="image-wrapper">
              <image :src="item.main_image" mode="aspectFill"></image>
            </view>
            <text class="title clamp">{{ item.name }}</text>
            <view class="price-box">
              <text class="price">{{ item.min_price }}</text>
              <text>佣金 :<text style="color: red;">￥{{ item.agent_commission }}</text></text>
            </view>
          </view>
        </view>
        <uni-load-more :status="more"></uni-load-more>
      </view>
      <view
        class="cate-mask"
        :class="cateMaskState === 0 ? 'none' : cateMaskState === 1 ? 'show' : ''"
        @click="toggleCateMask"
      >
        <view
          class="cate-content"
          @click.stop.prevent="stopPrevent"
          @touchmove.stop.prevent="stopPrevent"
        >
          <uni-section title="商品标签" type="line" padding>
            <view class="tag-list">
              <view
                class="tag-view"
                v-for="(item, index) in tagList"
                :key="index"
              >
                <uni-tag
                  :inverted="true"
                  :class="tag_ids.includes(item.id) ? 'selected-tag' : ''"
                  :text="item.name"
                  @click="tagSelect(item.id)"
                />
              </view>
            </view>
          </uni-section>
          <uni-section title="商品品牌" type="line" padding>
            <view class="tag-list">
              <view
                class="tag-view"
                v-for="(item, index) in brandList"
                :key="index"
              >
                <uni-tag
                  :inverted="true"
                  :class="brand_id == item.id ? 'selected-tag' : ''"
                  :text="item.name"
                  @click="brandSelect(item.id)"
                />
              </view>
            </view>
          </uni-section>
        </view>
      </view>
    </view>
  </template>
  
  <script>
  import empty from "@/components/empty";
  export default {
    components: {
      empty,
    },
    data() {
      return {
        cateMaskState: 0, //分类面板展开状态
        headerPosition: "fixed",
        headerTop: "0px",
        sortfield: "comprehensive",
        order: "",
        filterIndex: 0,
        cateId: 0, //已选三级分类id
        priceOrder: 0, //1 价格从低到高 2价格从高到低
        cateList: [],
        goodsList: [],
        options: [],
        tag_ids: [],
        tagList: [],
        brandList: [],
        brand_id: 0,
        triggered: false,
        has_more: true,
        more: "more",
        page: 1,
      };
    },
    onPageScroll(e) {
      //兼容iOS端下拉时顶部漂移
      if (e.scrollTop >= 0) {
        this.headerPosition = "fixed";
      } else {
        this.headerPosition = "absolute";
      }
    },
    async onPullDownRefresh() {
      this.page = 1;
      await this.loadData();
      // 数据更新后，停止下拉刷新动画，关闭下拉刷新
      uni.stopPullDownRefresh();
    },
    async onReachBottom() {
      if (this.has_more) {
        this.page++;
        await this.loadData();
      }
    },
    async onLoad(options) {
      // #ifdef H5
      this.$nextTick(() => {
        this.headerTop =
          document.getElementsByTagName("uni-page-head")[0].offsetHeight + "px";
      });
      // #endif
  
      this.options = options;
      Promise.all([
        this.$http.goods.goodsBrandList(),
        this.$http.goods.goodsTagList(),
      ]).then((r) => {
        this.brandList = r[0].data;
        this.tagList = r[1].data;
      });
  
      await this.loadData();
    },
    methods: {
      async loadData() {
        let { data } = await this.$http.agent.getAgentGoodsSearchPage({
          ...this.options,
          ...{
            pageNo: this.page,
            sortfield: this.sortfield,
            order: this.order,
            tag_ids: this.tag_ids,
            brand_id: this.brand_id,
          },
        });
        this.goodsList = [...this.goodsList, ...data.records];
        this.has_more = data.has_more;
        if (!this.has_more) {
          this.more = "noMore";
        }
      },
      async refresh() {
        if (!this.triggered) {
          this.triggered = true;
          setTimeout(async () => {
            this.page = 1;
            this.goodsList = [];
            await this.loadData();
            this.triggered = false;
          }, 500);
        }
      },
      lowerData() {
        if (!this.has_more) {
          return;
        }
        setTimeout(async () => {
          this.page++;
          await this.loadData();
          this.triggered = false;
        }, 500);
      },
      //筛选点击
      tabClick(index) {
        this.sortfield = "";
        this.order = "";
        if (this.filterIndex === index && index !== 2) {
          return;
        }
        this.filterIndex = index;
        if (index === 2) {
          this.priceOrder = this.priceOrder === 1 ? 2 : 1;
          this.sortfield = "price";
          this.order = this.priceOrder === 2 ? "desc" : "asc";
        } else {
          this.priceOrder = 0;
        }
        //综合排序
        if (index == 0) {
          this.sortfield = "comprehensive";
          this.order = "";
        }
        //销量优先
        if (index == 1) {
          this.sortfield = "sales";
          this.order = "desc";
        }
        this.pageNo = 1;
        this.goodsList = [];
        this.loadData();
      },
      toggleCateMask(type) {
        let timer = type === "show" ? 10 : 300;
        let state = type === "show" ? 1 : 0;
        this.cateMaskState = 2;
        setTimeout(() => {
          this.cateMaskState = state;
        }, timer);
      },
      changeCate(item) {
        this.toggleCateMask();
        this.loadData();
      },
      //详情
      navToDetailPage(item) {
        uni.navigateTo({
          url: `/pages/product/product?id=${item.id}`,
        });
      },
      stopPrevent() {},
      tagSelect(id) {
        const idx = this.tag_ids.findIndex((r) => r == id);
        if (idx === -1) {
          this.tag_ids.push(id);
        } else {
          this.tag_ids.splice(idx, 1);
        }
  
        this.pageNo = 1;
        this.goodsList = [];
        this.loadData();
      },
      brandSelect(id) {
        if (this.brand_id == id) {
          this.brand_id = 0;
        } else {
          this.brand_id = id;
        }
  
        this.pageNo = 1;
        this.goodsList = [];
        this.loadData();
      },
    },
  };
  </script>
  
  <style lang="scss">
  page,
  .content {
    background: $page-color-base;
  }
  
  .content {
    padding-top: 96upx;
  }
  
  .navbar {
    position: fixed;
    left: 0;
    top: var(--window-top);
    display: flex;
    width: 100%;
    height: 80upx;
    background: #fff;
    box-shadow: 0 2upx 10upx rgba(0, 0, 0, 0.06);
    z-index: 10;
  
    .nav-item {
      flex: 1;
      display: flex;
      justify-content: center;
      align-items: center;
      height: 100%;
      font-size: 30upx;
      color: $font-color-dark;
      position: relative;
  
      &.current {
        color: $base-color;
  
        &:after {
          content: "";
          position: absolute;
          left: 50%;
          bottom: 0;
          transform: translateX(-50%);
          width: 120upx;
          height: 0;
          border-bottom: 4upx solid $base-color;
        }
      }
    }
  
    .p-box {
      display: flex;
      flex-direction: column;
  
      .yticon {
        display: flex;
        align-items: center;
        justify-content: center;
        width: 30upx;
        height: 14upx;
        line-height: 1;
        margin-left: 4upx;
        font-size: 26upx;
        color: #888;
  
        &.active {
          color: $base-color;
        }
      }
  
      .xia {
        transform: scaleY(-1);
      }
    }
  
    .cate-item {
      display: flex;
      justify-content: center;
      align-items: center;
      height: 100%;
      width: 80upx;
      position: relative;
      font-size: 44upx;
  
      &:after {
        content: "";
        position: absolute;
        left: 0;
        top: 50%;
        transform: translateY(-50%);
        border-left: 1px solid #ddd;
        width: 0;
        height: 36upx;
      }
    }
  }
  
  /* 分类 */
  .cate-mask {
    position: fixed;
    left: 0;
    top: var(--window-top);
    bottom: 0;
    width: 100%;
    background: rgba(0, 0, 0, 0);
    z-index: 95;
    transition: 0.3s;
  
    .cate-content {
      width: 630upx;
      height: 100%;
      background: #fff;
      float: right;
      transform: translateX(100%);
      transition: 0.3s;
    }
  
    &.none {
      display: none;
    }
  
    &.show {
      background: rgba(0, 0, 0, 0.4);
  
      .cate-content {
        transform: translateX(0);
      }
    }
  }
  
  .cate-list {
    display: flex;
    flex-direction: column;
    height: 100%;
  
    .cate-item {
      display: flex;
      align-items: center;
      height: 90upx;
      padding-left: 30upx;
      font-size: 28upx;
      color: #555;
      position: relative;
    }
  
    .two {
      height: 64upx;
      color: #303133;
      font-size: 30upx;
      background: #f8f8f8;
    }
  
    .active {
      color: $base-color;
    }
  }
  
  /* 商品列表 */
  .goods-list {
    display: flex;
    flex-wrap: wrap;
    padding: 0 30upx;
    background: #fff;
  
    .goods-item {
      display: flex;
      flex-direction: column;
      width: 48%;
      padding-bottom: 40upx;
  
      &:nth-child(2n + 1) {
        margin-right: 4%;
      }
    }
  
    .image-wrapper {
      width: 100%;
      height: 330upx;
      border-radius: 3px;
      overflow: hidden;
  
      image {
        width: 100%;
        height: 100%;
        opacity: 1;
      }
    }
  
    .title {
      font-size: $font-lg;
      color: $font-color-dark;
      line-height: 80upx;
    }
  
    .price-box {
      display: flex;
      align-items: center;
      justify-content: space-between;
      padding-right: 10upx;
      font-size: 24upx;
      color: $font-color-light;
    }
  
    .price {
      font-size: $font-lg;
      color: $uni-color-primary;
      line-height: 1;
  
      &:before {
        content: "￥";
        font-size: 26upx;
      }
    }
  }
  
  .list-scroll-content {
    height: 100%;
  }
  .tag-list {
    display: flex;
    flex-wrap: wrap;
  }
  .tag-view {
    margin: 5rpx 15rpx 30rpx 15rpx;
  }
  .selected-tag {
    background-color: #d30b0b; /* 背景色 */
    color: #fff; /* 文字颜色 */
    border-color: #d30b0b; /* 边框颜色 */
  }
  </style>
  